// 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串，则返回空字符串 "" 。


#include<bits/stdc++.h>
#include<string>
#include<vector>
#include<unordered_set>
#include<unordered_map>
#include<set>
#include<queue>
#include<stack>
using namespace std;
// 264/266超时


class Solution {
public:
    bool check(int t[],int s[]){
        for(int i=0;i<60;i++){
            if(s[i]<t[i]){
                return false;
            }
        }
        return true;
    }

    string minWindow(string s, string t) {
        int tl[60]={0};
        int slen=s.size();
        int tlen = t.size();
        string res ="";
        if(slen<tlen || tlen==0){
            cout<<"test"<<endl;
            return res;
        }
        for(int i=0;i<tlen;i++){
            tl[t[i]-'A']++;
        }
        cout<<"test3"<<endl;
        for(int i=tlen;i<=slen;i++){
            // 标志是否已经进行判断
            int sl[60]={0};
            bool flag=false;
            cout<<"test1"<<endl;
            for(int j=0;j<=slen-i;j++){
                string stemp = s.substr(j,i);
                if(flag==false){
                    cout<<"test2"<<endl;
                    flag=true;
                    for(int k=0;k<stemp.size();k++){
                        sl[stemp[k]-'A']++;
                    }
                    if(check(tl,sl)){
                        res = stemp;
                        break;
                    }
                }
                else{
                    sl[s[j-1]-'A']--;
                    sl[s[j+i-1]-'A']++;
                    if(check(tl,sl)){
                        res=stemp;
                        break;
                    }
                }
            }
            if(res!=""){
                break;
            }
        }
        return res;
    }
};